package com.sojson.core.tags;

import static freemarker.template.ObjectWrapper.DEFAULT_WRAPPER;

import java.util.HashMap;
import java.util.Map;

import com.sojson.common.utils.LoggerUtils;
import com.sojson.common.utils.SpringContextUtil;
import com.sojson.core.statics.Constant;

import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;

/**
 * 开发公司：SOJSON在线工具 <p>
 * 版权所有：© www.sojson.com<p>
 * 博客地址：http://www.sojson.com/blog/  <p>
 * <p>
 * <p>
 * Freemarker 自定义标签 API公共入口
 * <p>
 * <p>
 * <p>
 * 区分　责任人　日期　　　　说明<br/>
 * 创建　周柏成　2016年6月2日 　<br/>
 *
 * @author zhou-baicheng
 * @version 1.0, 2016年6月2日 <br/>
 * @email so@sojson.com
 */

public class APITemplateModel extends WYFTemplateModel {

    @Override
    @SuppressWarnings({"unchecked"})
    protected Map<String, TemplateModel> putValue(Map params)
            throws TemplateModelException {

        Map<String, TemplateModel> paramWrap = null;
        if (null != params && params.size() != 0 || null != params.get(Constant.TARGET)) {
            String name = params.get(Constant.TARGET).toString();
            paramWrap = new HashMap<String, TemplateModel>(params);

            /**
             * 获取子类，用父类接收，
             */
            SuperCustomTag tag = SpringContextUtil.getBean(name, SuperCustomTag.class);
            //父类调用子类方法
            Object result = tag.result(params);

            //输出
            paramWrap.put(Constant.OUT_TAG_NAME, DEFAULT_WRAPPER.wrap(result));
        } else {
            LoggerUtils.error(getClass(), "Cannot be null, must include a 'name' attribute!");
        }
        return paramWrap;
    }


}
